//用于管理product模块的小仓库
import { defineStore } from 'pinia'  //引入创建pinia的方法
import { reqGetProducts, reqGetProduct, reqGetTm } from '@/api/product/index'  //引入发送请求获取数据的方法

const useProductStore = defineStore('product', {
    //state：仓库存储数据的地方
    state: () => ({
        tmList: [] as any, // 品牌列表数据
        productList: [] as any, // 产品分页列表数据
        total: 0, // 产品总数
        productInfo: {} as any,
        limit: 0,
        page: 0,
        tmId: 0,
        pages: 0,
        isLoading: false // 是否开启加载动画
    }),

    //action：处理action，可以书写自己的业务逻辑,可以直接修改state
    actions: {
        // 获取品牌列表数据
        async getTm() {
            const result = await reqGetTm()
            if (result.code == 200) {
                this.tmList = result.data
            } else {
                return Promise.reject('请求失败')
            }
        },
        //产品分页数据
        async getProducts() {
            this.isLoading = true
            const data = {
                limit: this.limit,
                page: this.page,
                tmId: this.tmId
            }
            const result = await reqGetProducts(data)
            if (result.code == 200) {
                this.productList = result.data.list
                this.total = result.data.total
                this.pages = result.data.pages
                this.isLoading = false
            }
            else {
                if (result.data) {
                    return Promise.reject(result.data)
                }
                return Promise.reject('请求失败')
            }
        },
        // 根据id获取产品信息
        async getProduct(id: number) {
            const result = await reqGetProduct(id)
            if (result.code == 200) {
                // 储存数据前将数据修改成想要的格式
                const obj = result.data
                // 如果有产品参数时
                if (obj.argumentList) {
                    obj.argumentList = this.computedArgumentList(obj.argumentList, 6)
                }
                this.productInfo = obj
            } else {
                if (result.data) {
                    return Promise.reject(result.data)
                }
                return Promise.reject('请求失败')
            }
        },
        // 计算argumentList // 计算需要分几组|六个元素一组
        computedArgumentList(arr: any, groupSize: number) {
            const result = [];
            for (let i = 0; i < arr.length; i += groupSize) {
                // 截取原数组中从i开始，长度为groupSize的一段子数组，并将其添加到结果数组中
                result.push(arr.slice(i, i + groupSize));
            }
            return result;
        },
        // 清除仓库
        clearProductStore() {
            this.tmList = [] // 品牌列表数据
            this.productList = [] // 产品分页列表数据
            this.total = 0 // 产品总数
            this.productInfo = {}
            this.limit = 0
            this.page = 0
            this.tmId = 0
            this.pages = 0
            this.isLoading = false // 是否开启加载动画
        }
    },

    //getters：可以理解为计算属性，用于简化仓库属性。让组件获取仓库数据更便捷
    getters: {

    }
})

export default useProductStore